The present invention generally relates to distributed software applications involving a client and a server, and particularly relates to automatic proxy generation for distributed applications.
Software applications generally split into broad categories defined by their implementation details. For example, two broad application categories are stand-alone applications and client-server applications, oftentimes referred to as “distributed” applications. As might be guessed, stand-alone applications operate in a self-contained environment on a host computer. In contrast, distributed applications use two or more computer systems cooperatively linked together by a network or other communication link.
For a distributed application, one or more systems generally assume the role of “server,” and provide service to one or more distributed clients. With this approach, the server may operate as a data store, and often serves as a computing platform available for use by the client applications. That is, a client application commonly invokes a server object method remotely, which executes on the server and returns results to the client application.
Such operations offer advantages in terms of enabling remote users to leverage the computing and storage resources of a potentially powerful server or servers, but also include the attendant disadvantages of increased software complexity. For example, distributed applications must deal with a host of potential errors and problems that stand-alone applications avoid. Such problems include network failures or other communication errors that degrade or prevent communication between a given client application and the server application. Further, data processing errors or problems might be incurred at one or both the client and the server, and the distributed application (the combined client-server applications) should provide robust error handling for such scenarios.
Distributed application errors that are ignored or poorly handled often result in unreliable and inconsistent software operation, which can stifle ongoing development of the software and frustrate end users. Handling errors at least at a high level may provide some added measure of reliability, but can deprive developers and users access to meaningful, lower-level information about the underlying error, or root cause of the error. Thus, for error handling to be truly robust, it must be expansive enough to deal with a broad range of error types, and yet include enough detailed error handling to support meaningful communication of error information.
In short, programmers generally face significant challenges when developing robust distributed applications. One approach to meeting such challenges includes the use of proxies on the client side and/or server side. A client-side proxy resides between the client-side application and the server-side application and acts, in some respects, as a mediator or go-between for the two applications. Through use of a proxy, the client application can be shielded, at least to some extent, from the vagaries of distributed application processing. That is, the proxy may be made to handle some or all of the overhead and potential error processing and recovery associated with interacting with the server application via the network.
One disadvantage of proxies stems from the additional labor required in writing the code to support proxy generation. While at least some of the general types of proxy-based capabilities are common across a broad range of distributed application types, each proxy necessarily includes information specific to a given application. Consequently, a traditional approach to proxy generation involves the programmer manually writing the software instructions describing proxy operation based on details of the distributed application and the network environment at hand.